home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 6 / CU Amiga Magazine's Super CD-ROM 06 (1996)(EMAP Images)(GB)(Track 1 of 4)[!][issue 1997-01].iso / cucd / games / tkgturbopatch / source / kalms_c2p.s < prev    next >
Text File  |  1996-10-30  |  7KB  |  470 lines

  1.  
  2.     include "exec/types.i"
  3.  
  4.     xdef    c2p_rout
  5.  
  6. ;                modulo    max res    fscreen    compu
  7. ; c2p1x1_cpu5_queue        no    320x256?  no    030
  8.  
  9.     IFND    BPLX
  10. BPLX    EQU    320
  11.     ENDC
  12.     IFND    BPLY
  13. BPLY    EQU    256
  14.     ENDC
  15.     IFND    BPLSIZE
  16. BPLSIZE    EQU    BPLX*BPLY/8
  17.     ENDC
  18.     IFND    CHUNKYXMAX
  19. CHUNKYXMAX EQU    BPLX
  20.     ENDC
  21.     IFND    CHUNKYYMAX
  22. CHUNKYYMAX EQU    BPLY
  23.     ENDC
  24.  
  25.     section    c2p,code
  26.  
  27. ; a0    c2pscreen
  28. ; a1    bitplanes
  29. ; d0.l    chunkyx [chunky-pixels]
  30. ; d1.w    chunkyy [chunky-pixels]
  31. ; d2.w    (scroffsx) [screen-pixels]
  32. ; d3.w    scroffsy [screen-pixels]
  33. ; d6.l  bplxmodulo 
  34. ; d7.l  chxmodulo
  35.  
  36. c2p_rout
  37.     lea    c2p_datanew(pc),a2
  38.         move.l  d0,c2p_chunkyx-c2p_data(a2)
  39.         add.l   d7,d0
  40.     mulu.w    d0,d1
  41.     move.l    d1,c2p_pixels-c2p_data(a2)
  42.  
  43.         move.l  d6,c2p_bplxmodulo-c2p_data(a2)
  44.         move.l  d7,c2p_chxmodulo-c2p_data(a2)
  45.  
  46.     bsr    c2p_copyinitblock
  47.     lea    c2p_data(pc),a2
  48.  
  49.     move.l    #$33333333,d5
  50.     move.l    #$55555555,d6
  51.     move.l    #$00ff00ff,a6
  52.  
  53.     add.w    #BPLSIZE,a1
  54.  
  55.     movem.l    a0-a1,-(sp)
  56.  
  57.         move.l  a0,c2p_endofline-c2p_data(a2)
  58.  
  59.         move.l  d0,-(sp)
  60.         move.l  c2p_chunkyx-c2p_data(a2),d0
  61.         add.l   d0,c2p_endofline-c2p_data(a2)
  62.         move.l  (sp)+,d0
  63.  
  64.         clr.w   c2p_dummyflag
  65.  
  66.     move.l    c2p_pixels-c2p_data(a2),a2
  67.     add.l    a0,a2
  68.     cmp.l    a0,a2
  69.     beq    .none
  70.  
  71.     move.l    (a0)+,d0
  72.     move.l    (a0)+,d2
  73.     move.l    (a0)+,d1
  74.     move.l    (a0)+,d3
  75.  
  76.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 1
  77.     and.l    d4,d0
  78.     and.l    d4,d2
  79.     lsl.l    #4,d0
  80.     or.l    d2,d0
  81.  
  82.     and.l    d4,d1
  83.     and.l    d4,d3
  84.     lsl.l    #4,d1
  85.     or.l    d3,d1
  86.  
  87.     move.l    d1,a3
  88.  
  89.     move.l    (a0)+,d2
  90.     move.l    (a0)+,d1
  91.     move.l    (a0)+,d3
  92.     move.l    (a0)+,d7
  93.  
  94.     and.l    d4,d1            ; Merge 4x1, part 2
  95.     and.l    d4,d2
  96.     lsl.l    #4,d2
  97.     or.l    d1,d2
  98.  
  99.     and.l    d4,d3
  100.     and.l    d4,d7
  101.     lsl.l    #4,d3
  102.     or.l    d7,d3
  103.  
  104.     move.l    a3,d1
  105.  
  106.     swap    d2            ; Swap 16x2
  107.     move.w    d0,d7
  108.     move.w    d2,d0
  109.     move.w    d7,d2
  110.     swap    d2
  111.  
  112.     swap    d3
  113.     move.w    d1,d7
  114.     move.w    d3,d1
  115.     move.w    d7,d3
  116.     swap    d3
  117.  
  118.     bra.s    .start1
  119. .x1
  120.     move.l    (a0)+,d0
  121.     move.l    (a0)+,d2
  122.     move.l    (a0)+,d1
  123.     move.l    (a0)+,d3
  124.  
  125.     move.l    d7,BPLSIZE(a1)
  126.  
  127.     move.l    #$0f0f0f0f,d4        ; Merge 4x1, part 1
  128.     and.l    d4,d0
  129.     and.l    d4,d2
  130.     lsl.l    #4,d0
  131.     or.l    d2,d0
  132.  
  133.     and.l    d4,d1
  134.     and.l    d4,d3
  135.     lsl.l    #4,d1
  136.     or.l    d3,d1
  137.  
  138.     move.l    d1,a3
  139.  
  140.     move.l    (a0)+,d2
  141.     move.l    (a0)+,d1
  142.     move.l    (a0)+,d3
  143.     move.l    (a0)+,d7
  144.  
  145.     move.l    a4,(a1)+
  146.  
  147.     and.l    d4,d1            ; Merge 4x1, part 2
  148.     and.l    d4,d2
  149.     lsl.l    #4,d2
  150.     or.l    d1,d2
  151.  
  152.     and.l    d4,d3
  153.     and.l    d4,d7
  154.     lsl.l    #4,d3
  155.     or.l    d7,d3
  156.  
  157.     move.l    a3,d1
  158.  
  159.     swap    d2            ; Swap 16x2
  160.     move.w    d0,d7
  161.     move.w    d2,d0
  162.     move.w    d7,d2
  163.     swap    d2
  164.  
  165.     swap    d3
  166.     move.w    d1,d7
  167.     move.w    d3,d1
  168.     move.w    d7,d3
  169.     swap    d3
  170.  
  171.     move.l    a5,-BPLSIZE-4(a1)
  172.  
  173.         tst.w   c2p_dummyflag
  174.         beq.s   .start1
  175.         add.l   c2p_bplxmodulo,a1
  176.         clr.w   c2p_dummyflag
  177. .start1
  178.     move.l    a6,d4
  179.  
  180.     move.l    d2,d7            ; Swap 2x2
  181.     lsr.l    #2,d7
  182.     eor.l    d0,d7
  183.     and.l    d5,d7
  184.     eor.l    d7,d0
  185.     lsl.l    #2,d7
  186.     eor.l    d7,d2
  187.  
  188.     move.l    d3,d7
  189.     lsr.l    #2,d7
  190.     eor.l    d1,d7
  191.     and.l    d5,d7
  192.     eor.l    d7,d1
  193.     lsl.l    #2,d7
  194.     eor.l    d7,d3
  195.  
  196.     move.l    d1,d7
  197.     lsr.l    #8,d7
  198.     eor.l    d0,d7
  199.     and.l    d4,d7
  200.     eor.l    d7,d0
  201.     lsl.l    #8,d7
  202.     eor.l    d7,d1
  203.  
  204.     move.l    d1,d7
  205.     lsr.l    #1,d7
  206.     eor.l    d0,d7
  207.     and.l    d6,d7
  208.     eor.l    d7,d0
  209.     move.l    d0,BPLSIZE*2(a1)
  210.     add.l    d7,d7
  211.     eor.l    d1,d7
  212.  
  213.     move.l    d3,d1
  214.     lsr.l    #8,d1
  215.     eor.l    d2,d1
  216.     and.l    d4,d1
  217.     eor.l    d1,d2
  218.     lsl.l    #8,d1
  219.     eor.l    d1,d3
  220.  
  221.     move.l    d3,d1
  222.     lsr.l    #1,d1
  223.     eor.l    d2,d1
  224.     and.l    d6,d1
  225.     eor.l    d1,d2
  226.     add.l    d1,d1
  227.     eor.l    d1,d3
  228.  
  229.     move.l    d2,a4
  230.     move.l    d3,a5
  231.  
  232.         cmp.l   c2p_endofline,a0
  233.         bne     .x1
  234.         move.l  d0,-(sp)
  235.         move.l  c2p_chxmodulo,d0
  236.         add.l   d0,a0
  237.         add.l   c2p_chunkyx,d0
  238.         add.l   d0,c2p_endofline
  239.         st      c2p_dummyflag
  240.         move.l  (sp)+,d0
  241. .skipmodulo
  242.     cmpa.l    a0,a2
  243.     bne    .x1
  244.  
  245.     move.l    d7,BPLSIZE(a1)
  246.     move.l    a4,(a1)+
  247.     move.l    a5,-BPLSIZE-4(a1)
  248.  
  249.     movem.l    (sp)+,a0-a1
  250.  
  251.         move.l  a0,c2p_endofline
  252.         move.l  d0,-(sp)
  253.         move.l  c2p_chunkyx,d0
  254.         add.l   d0,c2p_endofline
  255.         move.l  (sp)+,d0
  256.         clr.w   c2p_dummyflag
  257.  
  258.     add.l    #BPLSIZE*4,a1
  259.  
  260.     move.l    (a0)+,d0
  261.     move.l    (a0)+,d2
  262.     move.l    (a0)+,d1
  263.     move.l    (a0)+,d3
  264.  
  265.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 1
  266.     and.l    d4,d0
  267.     and.l    d4,d2
  268.     lsr.l    #4,d2
  269.     or.l    d2,d0
  270.  
  271.     and.l    d4,d1
  272.     and.l    d4,d3
  273.     lsr.l    #4,d3
  274.     or.l    d3,d1
  275.  
  276.     move.l    d1,a3
  277.  
  278.     move.l    (a0)+,d2
  279.     move.l    (a0)+,d1
  280.     move.l    (a0)+,d3
  281.     move.l    (a0)+,d7
  282.  
  283.     and.l    d4,d1            ; Merge 4x1, part 2
  284.     and.l    d4,d2
  285.     lsr.l    #4,d1
  286.     or.l    d1,d2
  287.  
  288.     and.l    d4,d3
  289.     and.l    d4,d7
  290.     lsr.l    #4,d7
  291.     or.l    d7,d3
  292.  
  293.     move.l    a3,d1
  294.  
  295.     swap    d2            ; Swap 16x2
  296.     move.w    d0,d7
  297.     move.w    d2,d0
  298.     move.w    d7,d2
  299.     swap    d2
  300.  
  301.     swap    d3
  302.     move.w    d1,d7
  303.     move.w    d3,d1
  304.     move.w    d7,d3
  305.     swap    d3
  306.  
  307.     bra.s    .start2
  308. .x2
  309.  
  310.     move.l    (a0)+,d0
  311.     move.l    (a0)+,d2
  312.     move.l    (a0)+,d1
  313.     move.l    (a0)+,d3
  314.  
  315.     move.l    d7,BPLSIZE(a1)
  316.  
  317.     move.l    #$f0f0f0f0,d4        ; Merge 4x1, part 1
  318.     and.l    d4,d0
  319.     and.l    d4,d2
  320.     lsr.l    #4,d2
  321.     or.l    d2,d0
  322.  
  323.     and.l    d4,d1
  324.     and.l    d4,d3
  325.     lsr.l    #4,d3
  326.     or.l    d3,d1
  327.  
  328.     move.l    d1,a3
  329.  
  330.     move.l    (a0)+,d2
  331.     move.l    (a0)+,d1
  332.     move.l    (a0)+,d3
  333.     move.l    (a0)+,d7
  334.  
  335.     move.l    a4,(a1)+
  336.  
  337.     and.l    d4,d1            ; Merge 4x1, part 2
  338.     and.l    d4,d2
  339.     lsr.l    #4,d1
  340.     or.l    d1,d2
  341.  
  342.     and.l    d4,d3
  343.     and.l    d4,d7
  344.     lsr.l    #4,d7
  345.     or.l    d7,d3
  346.  
  347.     move.l    a3,d1
  348.  
  349.     swap    d2            ; Swap 16x2
  350.     move.w    d0,d7
  351.     move.w    d2,d0
  352.     move.w    d7,d2
  353.     swap    d2
  354.  
  355.     swap    d3
  356.     move.w    d1,d7
  357.     move.w    d3,d1
  358.     move.w    d7,d3
  359.     swap    d3
  360.  
  361.     move.l    a5,-BPLSIZE-4(a1)
  362.  
  363.         tst.w   c2p_dummyflag
  364.         beq.s   .start2
  365.         add.l   c2p_bplxmodulo,a1
  366.         clr.w   c2p_dummyflag
  367. .start2
  368.     move.l    a6,d4
  369.  
  370.     move.l    d2,d7            ; Swap 2x2
  371.     lsr.l    #2,d7
  372.     eor.l    d0,d7
  373.     and.l    d5,d7
  374.     eor.l    d7,d0
  375.     lsl.l    #2,d7
  376.     eor.l    d7,d2
  377.  
  378.     move.l    d3,d7
  379.     lsr.l    #2,d7
  380.     eor.l    d1,d7
  381.     and.l    d5,d7
  382.     eor.l    d7,d1
  383.     lsl.l    #2,d7
  384.     eor.l    d7,d3
  385.  
  386.     move.l    d1,d7
  387.     lsr.l    #8,d7
  388.     eor.l    d0,d7
  389.     and.l    d4,d7
  390.     eor.l    d7,d0
  391.     lsl.l    #8,d7
  392.     eor.l    d7,d1
  393.  
  394.     move.l    d1,d7
  395.     lsr.l    #1,d7
  396.     eor.l    d0,d7
  397.     and.l    d6,d7
  398.     eor.l    d7,d0
  399.     move.l    d0,BPLSIZE*2(a1)
  400.     add.l    d7,d7
  401.     eor.l    d1,d7
  402.  
  403.     move.l    d3,d1
  404.     lsr.l    #8,d1
  405.     eor.l    d2,d1
  406.     and.l    d4,d1
  407.     eor.l    d1,d2
  408.     lsl.l    #8,d1
  409.     eor.l    d1,d3
  410.  
  411.     move.l    d3,d1
  412.     lsr.l    #1,d1
  413.     eor.l    d2,d1
  414.     and.l    d6,d1
  415.     eor.l    d1,d2
  416.     add.l    d1,d1
  417.     eor.l    d1,d3
  418.  
  419.     move.l    d2,a4
  420.     move.l    d3,a5
  421.  
  422.         cmpa.l  c2p_endofline,a0
  423.         bne     .x2
  424.         move.l  d0,-(sp)
  425.         move.l  c2p_chxmodulo,d0
  426.         add.l   d0,a0
  427.         add.l   c2p_chunkyx,d0
  428.         add.l   d0,c2p_endofline
  429.         st      c2p_dummyflag
  430.         move.l  (sp)+,d0
  431. .skip2
  432.     cmpa.l    a0,a2
  433.     bne    .x2
  434.  
  435.     move.l    d7,BPLSIZE(a1)
  436.     move.l    a4,(a1)+
  437.     move.l    a5,-BPLSIZE-4(a1)
  438.  
  439. .none
  440.     rts
  441.  
  442. c2p_copyinitblock
  443.     movem.l    a0-a1,-(sp)
  444.     lea    c2p_datanew,a0
  445.     lea    c2p_data,a1
  446.     moveq    #16-1,d0
  447. .copy    move.l    (a0)+,(a1)+
  448.     dbf    d0,.copy
  449.     movem.l    (sp)+,a0-a1
  450.     rts
  451.  
  452.     cnop 0,4
  453.  
  454. c2p_data
  455. c2p_screen      dc.l    0
  456. c2p_bplsize     dc.l    0
  457. c2p_pixels      dc.l    0
  458. c2p_endofline   dc.l    0
  459. c2p_chunkyx     dc.l    0
  460. c2p_bplxmodulo  dc.l    0
  461. c2p_chxmodulo   dc.l    0
  462. c2p_chunkyy     dc.w    0
  463. c2p_rowmod      dc.w    0
  464. c2p_dummyflag   dc.w    0
  465.     ds.l    16
  466.  
  467.     cnop 0,4
  468. c2p_datanew
  469.     ds.l    16
  470.